package com.zhihuishu.micro.course.openapi.online;

import com.zhihuishu.micro.course.openapi.online.dto.CourseCategoryOpenDto;
import com.zhihuishu.remote.RemoteException;
import com.zhihuishu.remote.RemoteResult;

/**
 * 课程分类远程接口
 * 
 * @author zhanglikun
 * @date 2015年10月22日 下午2:08:03
 */
public interface CourseCategoryOpenService {

	// =================================== 课程分类接口
	// ====================================

	/**
	 * 根据父类分类ID查询子分类列表，如果父ID为0，查询一级分类
	 * 
	 * @param parentId
	 * @return result为ArrayList<CategoryOpenDto>类型，使用时需要强制转换
	 * @throws RemoteException
	 */
	RemoteResult<?> queryCategoriesByParentId(int parentId)
			throws RemoteException;

	/**
	 * 查询课程分类列表
	 * 
	 * @param courseId
	 * @return result为ArrayList<CourseCategoryOpenDto>类型，使用时需要强制转换
	 * @throws RemoteException
	 */
	RemoteResult<?> queryCategoriesByCourseId(long courseId)
			throws RemoteException;

	/**
	 * 创建课程分类，只需要分类ID有值即可
	 * 
	 * @param courseCategory
	 * @return
	 * @throws RemoteException
	 */
	RemoteResult<Integer> createCourseCategory(
			CourseCategoryOpenDto courseCategory) throws RemoteException;

	/**
	 * 更新课程分类，只需要分类ID有值即可，更新时，三个级别分类不能同时为空(即：至少更新到其中一项)
	 * 
	 * @param courseCategory
	 * @return
	 * @throws RemoteException
	 */
	RemoteResult<Void> updateCourseCategory(CourseCategoryOpenDto courseCategory)
			throws RemoteException;

	// =================================== 课程标签接口
	// ====================================

	/**
	 * 查询课程标签列表
	 * 
	 * @param courseId
	 * @return
	 */
	RemoteResult<?> listByCourseId(long courseId) throws RemoteException;

	/**
	 * 创建课程标签，可以一次创建多个(CourseTagDto中的课程ID将被忽略)
	 * 
	 * @param courseId
	 * @param tags
	 */
	RemoteResult<?> saveCourseTag(long courseId, String... tags)
			throws RemoteException;

	/**
	 * 删除课程标签，允许一门课一次删除多个
	 * 
	 * @param courseId
	 * @param tagIds
	 */
	RemoteResult<Void> deleteCourseTag(long courseId, int... tagIds)
			throws RemoteException;

	/**
	 * 
	 * @discription 根据课程标签id删除课程分类标签
	 * @author jipeng
	 * @created 2016年9月19日 下午7:32:28
	 * @param id
	 * @return
	 */
	RemoteResult<Void> deleteCourseCategoryById(Integer id);

}
